package com.hsylient.javase.chapter01;

import lombok.SneakyThrows;
import org.junit.Test;

/**
 * 测试使用jdk中的包装类Integer
 * 主要包括Integer中的方法以及使用过程中的一些心得
 * <p>
 * 1、Integer类继承了Number抽象类
 */
public class MyInteger {

    // 使用下划线的方式更加方便阅读
    private static final Integer CONSTANT = 104_000_000_0;

    @Test
    public void testField() {
        System.out.println("int类型所占空间大小(字节)：" + Integer.BYTES);
        System.out.println("int类型所占空间大小(bit)：" + Integer.SIZE);
        System.out.println("int类型的最大值：" + Integer.MAX_VALUE);
        System.out.println("int类型的最小值：" + Integer.MIN_VALUE);
    }

    @Test
    @SneakyThrows
    public void testStaticMethod() {
        // 将integer类型转换为指定进制的数字，同时以字符串形式表示
        System.out.println(Integer.toString(122222, Character.FORMAT));
        // 将integer转换为16进制的字符串
        System.out.println(Integer.toHexString(122222));
        // 将Integer转换为8进制的字符串
        System.out.println(Integer.toOctalString(123123));

        // 将一个对应进制的字符串 通过对应的进制进行转换为10进制的整数的字符串形式
        System.out.println(Integer.parseInt("10101010101", Character.MIN_RADIX));
        System.out.println(Integer.parseInt("adafa4564536123467567asfasf", 5, 8, Character.LETTER_NUMBER));
        System.out.println(Integer.parseInt("123456"));
        System.out.println(Integer.parseInt("-12312"));
        System.out.println("-3214".charAt(0));
        System.out.println(Integer.parseUnsignedInt("+123123"));
        System.out.println(Integer.valueOf("123123"));
        System.out.println(CONSTANT.byteValue());
        System.out.println(Integer.reverse(123));
    }

    /**
     * 最大值加1变成最小值，最小值减1变成最大值
     */
    @Test
    @SuppressWarnings("all")
    public void outFlow() {
        System.out.println(Integer.MAX_VALUE + 1);
        System.out.println(Integer.MIN_VALUE - 1);
    }

    @Test
    @SuppressWarnings("all")
    public void testSkill() {
        /*
         * java中为了提高程序眼的效率将-128-127之间的所有包装对象提前创建好，放在方法区内存的常量池中
         * 这个区间的值不需要new直接使用就好了
         */
        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);// false

        Integer c = 127;
        Integer d = 127;
        System.out.println(c == d);// true

        Integer e = -128;
        Integer f = -128;
        System.out.println(e == f);// true
    }

    @Test
    public void testMethod() {
        System.out.println(Integer.reverse(123));
    }
}
